package com.atguigu.mybatisplus.pojo;

import com.atguigu.mybatisplus.enums.SexEnum;
import com.baomidou.mybatisplus.annotation.*;
import lombok.*;

/**
 * Date:2022/2/12
 * Author:ybc
 * Description:
 */
@Data
// 设置实体类所对应的表名
// 假如说现在实体类是User,而数据库是t_user.如果不用@TableName去对应上,MybatisPlus是用不了的
// 解决了:实体类和数据库表名不一致的问题
 @TableName("t_user")
public class User {

    // 将属性所对应的字段指定为主键
    // @TableId注解的value属性用于指定主键的字段
    // @TableId注解的type属性设置主键生成策略
//     @TableId(value = "uid", type = IdType.AUTO)
    /*
    * 情况1:
    * MybatisPlus的默认的规则是:id为主键.所以这个注解是是非常重要的,而且经常用到.
    * 如果说你的数据库的表的主键是uid,实体类的属性是uid,而且没加@TableId("uid"),会报错的.
    * 如果说你的数据库的表的主键是uid,实体类的属性是uid,加了@TableId("uid"),就不会报错.
    *
    * 情况2: 为什么?因为MP是先找实体类id,发现有@TableId("uid"),再找数据库就没错.
    * 如果说你的数据库的表的主键是uid,实体类的属性是id,而且没加@TableId("uid"),会报错的.
    * 如果说你的数据库的表的主键是uid,实体类的属性是id,加了@TableId("uid"),就不会报错.
    *
    * */
    // @TableId("uid")
    // @TableId // 不用加value="uid",也能达到@TableId("uid")的效果uid
    @TableId
    private Long id; // 因为数据库是bigint所以这里是Long类型

    // 1. MP已经默认将下划线转小驼峰了,不用重新加配置.比如说数据库user_name,实体类userName,那我不用加配置.MP自动转.
    // 2. 假如说实体类是name,数据库是user_name,那就必须要指定@TableField("user_name")
    // 指定属性所对应的字段名
    // @TableField("user_name")
    private String name;

    private Integer age;

    private String email;

    private SexEnum sex;

    // 加了这个,在查询所有时,isDelete=1不会被查询到,只会查=0的
    @TableLogic
    private Integer isDeleted;

}
